<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 函数是一等公民
        // 【1，函数可作为参数  2，函数可作为返回值--让函数去生成一个函数  3，函数可赋值给变量
        
        
        // 1.1高阶函数----函数作为参数【函数作为参数：使函数变得更灵活--因为具体的函数内容可以在引用函数时定义】
        function ff(array,fn) {
            for(let i = 0; i<array.length;i++) {
                fn(array[i]);
            }
        };
        let arr = [1,2,3,5,6,7];
        ff(arr,function(item) {
            console.log(item);//1 2 3 5 6 7
        });

        // //1.2高阶函数强化---函数作为参数：filter  【过滤数组中满足条件的函数。遍历数组，把数据中满足条件的元素先存储起来，最终返回结果。】
        function filter (array,fn) {  
            let results = [];
            for(let i = 0;i<array.length;i++) {
                if(fn(array[i])) {//如果数组中的这个元素满足条件fn，就把该元素存储在数组results中
                    results.push(array[i]);
                }
            }
            return results;
        }
        let testarr = [1,2,4,6,7,9];
        let a = filter(testarr,item => {//定义一个变量用来接收过滤函数的返回结果
            return item % 2 === 0;
        });
        console.log(a);//[2,4,6]

    </script>
</body>
</html>